﻿using TaskManagerLib.MinimumWork;
using TaskManagerLib.Symbol;

namespace TaskManagerLib.ComplexWork;

public interface IComplexWork
{
    // 执行任务的指针，表示下一个将会执行那个任务
    public int ProcessPoint
    {
        get;
        set;
    }
    // 关联该工作的瞬时工作/最小工作
    // 序列化时可以忽略该属性，自定义序列化
    public List<IMiniWork> MiniWorks
    {
        get;
        set;
    }
    public void AddMiniWork(IMiniWork? work);

    public void RemoveMiniWork(IMiniWork? work);

    public long WorkId
    {
        get;
        set;
    }
    public const int Success = 1;
    public const int NotSuccess = 0;
    // 任务执行进度
    public double Progress
    {
        get;
        set;
    }
    // 任务执行情况通知回调
    public ProgressDelegate? Notification
    {
        get;
        set;
    }
    // 任务的状态
    public WorkStatus? Status
    {
        get;
        set;
    }

    // 用于暂停工作的执行
    public CancellationTokenSource? CancellationTokenSource
    {
        get;
        set;
    }

    public void Pause();
    // 任务是否完成
    public bool IsFinished();

    // 开始异步执行
    public void Start();

    // 异步阻塞执行直到任务执行完毕或者暂停/取消
    public Task StartAndBlockAsync();

}